3.3. Visualising fluid motion

In this section:

  • Can snapshots of the velocity field tell us about the paths taken by individual fluid particles?

  • Does a streak of dye injected into a fluid tell us about the paths taken by individual fluid particles?

  • What is a “stream function” and does every flow have one?

3.3.1. Streamlines

A streamline is a curve that is parallel to the velocity field \(\underline{v}(\underline{x},t)\) at a given, fixed time \(t\) and passes through a given point \(\underline{x}_0\). A family of streamlines at time \(t\) provides a snapshot of the velocity field.

To illustrate the concepts, we will take

(3.10)\[\underline{v}=(1,-2te^{-t^2}).\]

This field has no spatial dependence, so the streamlines are straight lines with slope \(-2t e^{-t^2}\). The direction of the streamlines changes at each instant, as shown in the figure below. The upper plot shows the slope function plotted against the time. The second row of plots shows the streamlines at intervals \(t=[0.00,0.75,1.50,2.25,3.00]\).

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2, 2, 10)
y = np.linspace(-2, 2, 10)
X, Y = np.meshgrid(x, y)
U=V=np.ones_like(X)
start=[[-1.5,-1.5],[-1,-1],[-0.5,-0.5],[0,0],[0.5,0.5],[1,1],[1.5,1.5]]

import matplotlib.gridspec as gridspec
fig = plt.figure(constrained_layout=True,figsize=(10,4))
spec = gridspec.GridSpec(ncols=5, nrows=2, figure=fig)

def slope(t):
    return -2*t*np.exp(-t**2)

tvals=np.linspace(0,3.35,100)

n=5    #number of subplots

for s in range(n):
    ax=fig.add_subplot(spec[1,s])
    ax.xaxis.set_ticks([]), ax.yaxis.set_ticks([])
    t=3*s/(n-1)
    #ax.set_title('t='+str(t))
    ax.streamplot(X,Y,U,slope(t)*V,start_points=start,density=10)

ax = fig.add_subplot(spec[0, :])
ax.plot(tvals,slope(tvals))
ax.axis([-0.35,3.35,-0.9,0.1])
ax.xaxis.set_ticks([0,0.75,1.5,2.25,3])
ax.set_title('$-2t e^{-t^2}$')

plt.show()
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\getlimits.py:172: RuntimeWarning: divide by zero encountered in exp2
  eps=exp2(ld(-112)),
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\getlimits.py:51: RuntimeWarning: divide by zero encountered in log10
  self.precision = int(-log10(self.eps))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\getlimits.py:52: RuntimeWarning: divide by zero encountered in power
  self.resolution = float_to_float(float_conv(10) ** (-self.precision))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\getlimits.py:184: RuntimeWarning: divide by zero encountered in exp2
  epsneg_f80 = exp2(ld(-64))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\getlimits.py:185: RuntimeWarning: divide by zero encountered in exp2
  tiny_f80 = exp2(ld(-16382))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\getlimits.py:199: RuntimeWarning: divide by zero encountered in exp2
  eps=exp2(ld(-63)),
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\getlimits.py:212: RuntimeWarning: divide by zero encountered in nextafter
  if hasattr(umath, 'nextafter')  # Missing on some platforms?
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\getlimits.py:224: RuntimeWarning: divide by zero encountered in exp2
  eps=exp2(ld(-105)),
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\getlimits.py:225: RuntimeWarning: divide by zero encountered in exp2
  epsneg= exp2(ld(-106)),
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\getlimits.py:227: RuntimeWarning: divide by zero encountered in exp2
  tiny=exp2(ld(-1022)))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\__init__.py:343: RuntimeWarning: divide by zero encountered in subtract
  if not abs(x.dot(x) - 2.0) < 1e-5:
C:\Users\Ali\anaconda3\lib\site-packages\numpy\__init__.py:343: RuntimeWarning: divide by zero encountered in absolute
  if not abs(x.dot(x) - 2.0) < 1e-5:
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:127: RuntimeWarning: divide by zero encountered in multiply
  start = asanyarray(start) * 1.0
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:128: RuntimeWarning: divide by zero encountered in multiply
  stop  = asanyarray(stop)  * 1.0
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:134: RuntimeWarning: divide by zero encountered in double_scalars
  delta = stop - start
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:141: RuntimeWarning: divide by zero encountered in double_scalars
  step = delta / div
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:56: RuntimeWarning: divide by zero encountered in reduce
  return umr_any(a, axis, dtype, out, keepdims)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:151: RuntimeWarning: divide by zero encountered in multiply
  y *= step
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:161: RuntimeWarning: divide by zero encountered in add
  y += start
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\colors.py:850: RuntimeWarning: divide by zero encountered in double_scalars
  [(1.0 - x, y1, y0) for x, y0, y1 in reversed(data)])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\tri\triinterpolate.py:669: RuntimeWarning: divide by zero encountered in true_divide
  gauss_w = np.ones([9], dtype=np.float64) / 9.
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:127: RuntimeWarning: divide by zero encountered in multiply
  start = asanyarray(start) * 1.0
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:128: RuntimeWarning: divide by zero encountered in multiply
  stop  = asanyarray(stop)  * 1.0
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:134: RuntimeWarning: divide by zero encountered in double_scalars
  delta = stop - start
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:141: RuntimeWarning: divide by zero encountered in double_scalars
  step = delta / div
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:56: RuntimeWarning: divide by zero encountered in reduce
  return umr_any(a, axis, dtype, out, keepdims)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:151: RuntimeWarning: divide by zero encountered in multiply
  y *= step
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:161: RuntimeWarning: divide by zero encountered in add
  y += start
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\figure.py:321: RuntimeWarning: divide by zero encountered in isfinite
  if not np.isfinite(figsize).all() or (np.array(figsize) < 0).any():
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:62: RuntimeWarning: divide by zero encountered in reduce
  return umr_all(a, axis, dtype, out, keepdims)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\figure.py:321: RuntimeWarning: divide by zero encountered in less
  if not np.isfinite(figsize).all() or (np.array(figsize) < 0).any():
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1996: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 0] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1997: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 1] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1998: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 2] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1999: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 0] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2000: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 1] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2001: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 2] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\gridspec.py:203: RuntimeWarning: divide by zero encountered in subtract
  fig_tops, fig_bottoms = (top - cell_hs).reshape((-1, 2)).T
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\gridspec.py:204: RuntimeWarning: divide by zero encountered in add
  fig_lefts, fig_rights = (left + cell_ws).reshape((-1, 2)).T
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:43: RuntimeWarning: divide by zero encountered in reduce
  return umr_minimum(a, axis, None, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:39: RuntimeWarning: divide by zero encountered in reduce
  return umr_maximum(a, axis, None, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:361: RuntimeWarning: divide by zero encountered in double_scalars
  return points[1, 0] - points[0, 0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:367: RuntimeWarning: divide by zero encountered in double_scalars
  return points[1, 1] - points[0, 1]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\function_base.py:1281: RuntimeWarning: divide by zero encountered in subtract
  a = op(a[slice1], a[slice2])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2165: RuntimeWarning: divide by zero encountered in less_equal
  if np.any(np.diff(steps) <= 0) or steps[-1] > 10 or steps[0] < 1:
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:87: RuntimeWarning: divide by zero encountered in reduce
  return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2179: RuntimeWarning: divide by zero encountered in multiply
  flights = (0.1 * steps[:-1], steps, 10 * steps[1])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2179: RuntimeWarning: divide by zero encountered in double_scalars
  flights = (0.1 * steps[:-1], steps, 10 * steps[1])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:3210: RuntimeWarning: divide by zero encountered in isfinite
  and not np.isfinite(converted_limit)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2792: RuntimeWarning: divide by zero encountered in isfinite
  if (not np.isfinite(vmin)) or (not np.isfinite(vmax)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2805: RuntimeWarning: divide by zero encountered in double_scalars
  if maxabsvalue < (1e6 / tiny) * np.finfo(float).tiny:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1977: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 2] += tx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1978: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 2] += ty
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in exp
  
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in double_scalars
  
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:25: RuntimeWarning: divide by zero encountered in multiply
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\numeric.py:2362: RuntimeWarning: divide by zero encountered in isfinite
  xfin = isfinite(x)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\numeric.py:2363: RuntimeWarning: divide by zero encountered in isfinite
  yfin = isfinite(y)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\numeric.py:2346: RuntimeWarning: divide by zero encountered in subtract
  return less_equal(abs(x-y), atol + rtol * abs(y))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\numeric.py:2346: RuntimeWarning: divide by zero encountered in absolute
  return less_equal(abs(x-y), atol + rtol * abs(y))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\numeric.py:2346: RuntimeWarning: divide by zero encountered in multiply
  return less_equal(abs(x-y), atol + rtol * abs(y))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\numeric.py:2346: RuntimeWarning: divide by zero encountered in add
  return less_equal(abs(x-y), atol + rtol * abs(y))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\numeric.py:2346: RuntimeWarning: divide by zero encountered in less_equal
  return less_equal(abs(x-y), atol + rtol * abs(y))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:340: RuntimeWarning: divide by zero encountered in double_scalars
  self.dx = x[1] - x[0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:341: RuntimeWarning: divide by zero encountered in double_scalars
  self.dy = y[1] - y[0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:346: RuntimeWarning: divide by zero encountered in double_scalars
  self.width = x[-1] - x[0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:347: RuntimeWarning: divide by zero encountered in double_scalars
  self.height = y[-1] - y[0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:349: RuntimeWarning: divide by zero encountered in double_scalars
  if not np.allclose(np.diff(x), self.width / (self.nx - 1)):
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\numeric.py:2346: RuntimeWarning: divide by zero encountered in double_scalars
  return less_equal(abs(x-y), atol + rtol * abs(y))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:351: RuntimeWarning: divide by zero encountered in double_scalars
  if not np.allclose(np.diff(y), self.height / (self.ny - 1)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:377: RuntimeWarning: divide by zero encountered in multiply
  self.nx, self.ny = (30 * np.broadcast_to(density, 2)).astype(int)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:272: RuntimeWarning: divide by zero encountered in long_scalars
  self.x_grid2mask = (mask.nx - 1) / (grid.nx - 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:273: RuntimeWarning: divide by zero encountered in long_scalars
  self.y_grid2mask = (mask.ny - 1) / (grid.ny - 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:275: RuntimeWarning: divide by zero encountered in double_scalars
  self.x_mask2grid = 1. / self.x_grid2mask
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:276: RuntimeWarning: divide by zero encountered in double_scalars
  self.y_mask2grid = 1. / self.y_grid2mask
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:278: RuntimeWarning: divide by zero encountered in double_scalars
  self.x_data2grid = 1. / grid.dx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:279: RuntimeWarning: divide by zero encountered in double_scalars
  self.y_data2grid = 1. / grid.dy
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:2365: RuntimeWarning: divide by zero encountered in isfinite
  condition = ~(np.isfinite(a))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:2365: RuntimeWarning: divide by zero encountered in invert
  condition = ~(np.isfinite(a))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1024: RuntimeWarning: divide by zero encountered in logical_or
  m = umath.logical_or(ma, getmaskarray(b))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1160: RuntimeWarning: divide by zero encountered in isfinite
  m = ~umath.isfinite(result)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1160: RuntimeWarning: divide by zero encountered in invert
  m = ~umath.isfinite(result)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1161: RuntimeWarning: divide by zero encountered in bitwise_or
  m |= getmask(a)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1162: RuntimeWarning: divide by zero encountered in bitwise_or
  m |= getmask(b)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:853: RuntimeWarning: divide by zero encountered in absolute
  return umath.absolute(a) * self.tolerance >= umath.absolute(b)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:853: RuntimeWarning: divide by zero encountered in multiply
  return umath.absolute(a) * self.tolerance >= umath.absolute(b)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:853: RuntimeWarning: divide by zero encountered in greater_equal
  return umath.absolute(a) * self.tolerance >= umath.absolute(b)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1166: RuntimeWarning: divide by zero encountered in bitwise_or
  m |= domain(da, db)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1178: RuntimeWarning: divide by zero encountered in multiply
  masked_da = umath.multiply(m, da)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1181: RuntimeWarning: divide by zero encountered in add
  result += masked_da
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:6848: RuntimeWarning: divide by zero encountered in isfinite
  invalid = np.logical_not(np.isfinite(result.view(ndarray)))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:6848: RuntimeWarning: divide by zero encountered in logical_not
  invalid = np.logical_not(np.isfinite(result.view(ndarray)))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:937: RuntimeWarning: divide by zero encountered in isfinite
  m = ~umath.isfinite(result)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:937: RuntimeWarning: divide by zero encountered in invert
  m = ~umath.isfinite(result)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:885: RuntimeWarning: divide by zero encountered in less
  return umath.less(x, self.critical_value)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:938: RuntimeWarning: divide by zero encountered in bitwise_or
  m |= self.domain(d)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:939: RuntimeWarning: divide by zero encountered in bitwise_or
  m |= getmask(a)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:158: RuntimeWarning: divide by zero encountered in double_scalars
  if not (grid.x_origin <= xs <= grid.x_origin + grid.width and
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:159: RuntimeWarning: divide by zero encountered in double_scalars
  grid.y_origin <= ys <= grid.y_origin + grid.height):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:166: RuntimeWarning: divide by zero encountered in subtract
  sp2[:, 0] -= grid.x_origin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:167: RuntimeWarning: divide by zero encountered in subtract
  sp2[:, 1] -= grid.y_origin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:290: RuntimeWarning: divide by zero encountered in double_scalars
  return xd * self.x_data2grid, yd * self.y_data2grid
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:283: RuntimeWarning: divide by zero encountered in double_scalars
  return (int(xi * self.x_grid2mask + 0.5),
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:284: RuntimeWarning: divide by zero encountered in double_scalars
  int(yi * self.y_grid2mask + 0.5))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:534: RuntimeWarning: divide by zero encountered in true_divide
  maxds = min(1. / dmap.mask.nx, 1. / dmap.mask.ny, 0.1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:653: RuntimeWarning: divide by zero encountered in double_scalars
  xt = xi - x
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:654: RuntimeWarning: divide by zero encountered in double_scalars
  yt = yi - y
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:655: RuntimeWarning: divide by zero encountered in double_scalars
  a0 = a00 * (1 - xt) + a01 * xt
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:656: RuntimeWarning: divide by zero encountered in double_scalars
  a1 = a10 * (1 - xt) + a11 * xt
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:657: RuntimeWarning: divide by zero encountered in double_scalars
  ai = a0 * (1 - yt) + a1 * yt
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:443: RuntimeWarning: divide by zero encountered in double_scalars
  dt_ds = 1. / ds_dt
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:446: RuntimeWarning: divide by zero encountered in double_scalars
  return ui * dt_ds, vi * dt_ds
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:555: RuntimeWarning: divide by zero encountered in double_scalars
  k2x, k2y = f(xi + ds * k1x, yi + ds * k1y)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:569: RuntimeWarning: divide by zero encountered in double_scalars
  dx1 = ds * k1x
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:570: RuntimeWarning: divide by zero encountered in double_scalars
  dy1 = ds * k1y
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:571: RuntimeWarning: divide by zero encountered in double_scalars
  dx2 = ds * 0.5 * (k1x + k2x)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:572: RuntimeWarning: divide by zero encountered in double_scalars
  dy2 = ds * 0.5 * (k1y + k2y)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:576: RuntimeWarning: divide by zero encountered in double_scalars
  error = np.hypot((dx2 - dx1) / (nx - 1), (dy2 - dy1) / (ny - 1))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:576: RuntimeWarning: divide by zero encountered in hypot
  error = np.hypot((dx2 - dx1) / (nx - 1), (dy2 - dy1) / (ny - 1))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:580: RuntimeWarning: divide by zero encountered in double_scalars
  xi += dx2
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:581: RuntimeWarning: divide by zero encountered in double_scalars
  yi += dy2
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:586: RuntimeWarning: divide by zero encountered in double_scalars
  if stotal + ds > maxlength:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:588: RuntimeWarning: divide by zero encountered in double_scalars
  stotal += ds
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:608: RuntimeWarning: divide by zero encountered in double_scalars
  dsx = xi / -cx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:618: RuntimeWarning: divide by zero encountered in double_scalars
  xf_traj.append(xi + cx * ds)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:619: RuntimeWarning: divide by zero encountered in double_scalars
  yf_traj.append(yi + cy * ds)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:564: RuntimeWarning: divide by zero encountered in double_scalars
  stotal += ds
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:472: RuntimeWarning: divide by zero encountered in double_scalars
  stotal += s
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:610: RuntimeWarning: divide by zero encountered in double_scalars
  dsx = (nx - 1 - xi) / cx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:482: RuntimeWarning: divide by zero encountered in double_scalars
  stotal += s
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:293: RuntimeWarning: divide by zero encountered in true_divide
  return xg / self.x_data2grid, yg / self.y_data2grid
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:190: RuntimeWarning: divide by zero encountered in add
  tx += grid.x_origin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:191: RuntimeWarning: divide by zero encountered in add
  ty += grid.y_origin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:197: RuntimeWarning: divide by zero encountered in hypot
  s = np.cumsum(np.hypot(np.diff(tx), np.diff(ty)))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:198: RuntimeWarning: divide by zero encountered in double_scalars
  n = np.searchsorted(s, s[-1] / 2.)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:200: RuntimeWarning: divide by zero encountered in int_scalars
  arrow_head = (np.mean(tx[n:n + 2]), np.mean(ty[n:n + 2]))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:75: RuntimeWarning: divide by zero encountered in int_scalars
  items *= arr.shape[mu.normalize_axis_index(ax, arr.ndim)]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:178: RuntimeWarning: divide by zero encountered in reduce
  ret = umr_sum(arr, axis, dtype, out, keepdims, where=where)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:188: RuntimeWarning: divide by zero encountered in double_scalars
  ret = ret.dtype.type(ret / rcount)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:379: RuntimeWarning: divide by zero encountered in double_scalars
  return (x0, y0, x1 - x0, y1 - y0)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1712: RuntimeWarning: divide by zero encountered in equal
  return np.all(self.get_matrix() == other.get_matrix())
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2587: RuntimeWarning: divide by zero encountered in double_scalars
  x_scale = 1.0 / inw
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2588: RuntimeWarning: divide by zero encountered in double_scalars
  y_scale = 1.0 / inh
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2589: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx = np.array([[x_scale, 0.0    , (-inl*x_scale)],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2590: RuntimeWarning: divide by zero encountered in double_scalars
  [0.0    , y_scale, (-inb*y_scale)],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2516: RuntimeWarning: divide by zero encountered in double_scalars
  x12, y12 = (x1 + x2) / 2., (y1 + y2) / 2.
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2517: RuntimeWarning: divide by zero encountered in double_scalars
  dx, dy = x2 - x1, y2 - y1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2521: RuntimeWarning: divide by zero encountered in double_scalars
  cx, cy = x12 + f * dy, y12 - f * dx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:416: RuntimeWarning: divide by zero encountered in double_scalars
  return (x - cx) ** 2 + (y - cy) ** 2 < r2
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:361: RuntimeWarning: divide by zero encountered in not_equal
  if inside(ctl_points[-2:]) != begin_inside:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2992: RuntimeWarning: divide by zero encountered in hypot
  head_dist = np.hypot(head_length, head_width)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2993: RuntimeWarning: divide by zero encountered in double_scalars
  cos_t, sin_t = head_length / head_dist, head_width / head_dist
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2956: RuntimeWarning: divide by zero encountered in double_scalars
  dx, dy = x0 - x1, y0 - y1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2958: RuntimeWarning: divide by zero encountered in hypot
  cp_distance = np.hypot(dx, dy)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2962: RuntimeWarning: divide by zero encountered in double_scalars
  pad_projected = (.5 * linewidth / sin_t)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2969: RuntimeWarning: divide by zero encountered in double_scalars
  ddx = pad_projected * dx / cp_distance
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2970: RuntimeWarning: divide by zero encountered in double_scalars
  ddy = pad_projected * dy / cp_distance
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2973: RuntimeWarning: divide by zero encountered in double_scalars
  dx = dx / cp_distance * head_dist
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2974: RuntimeWarning: divide by zero encountered in double_scalars
  dy = dy / cp_distance * head_dist
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2976: RuntimeWarning: divide by zero encountered in double_scalars
  dx1, dy1 = cos_t * dx + sin_t * dy, -sin_t * dx + cos_t * dy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2977: RuntimeWarning: divide by zero encountered in double_scalars
  dx2, dy2 = cos_t * dx - sin_t * dy, sin_t * dx + cos_t * dy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2979: RuntimeWarning: divide by zero encountered in double_scalars
  vertices_arrow = [(x1 + ddx + dx1, y1 + ddy + dy1),
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2980: RuntimeWarning: divide by zero encountered in double_scalars
  (x1 + ddx, y1 + ddy),
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2981: RuntimeWarning: divide by zero encountered in double_scalars
  (x1 + ddx + dx2, y1 + ddy + dy2)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:3023: RuntimeWarning: divide by zero encountered in double_scalars
  _path = [Path(np.concatenate([[(x0 + ddxA, y0 + ddyA)],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:3025: RuntimeWarning: divide by zero encountered in double_scalars
  [(x3 + ddxB, y3 + ddyB)]]),
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:339: RuntimeWarning: divide by zero encountered in not_equal
  not_stop_mask = codes != cls.STOP
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:2142: RuntimeWarning: divide by zero encountered in isfinite
  if not np.any(np.isfinite(xys)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\colors.py:306: RuntimeWarning: divide by zero encountered in less
  if np.any((result < 0) | (result > 1)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\colors.py:306: RuntimeWarning: divide by zero encountered in greater
  if np.any((result < 0) | (result > 1)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\colors.py:306: RuntimeWarning: divide by zero encountered in bitwise_or
  if np.any((result < 0) | (result > 1)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\lines.py:70: RuntimeWarning: divide by zero encountered in double_scalars
  scaled_offset = offset * lw
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:219: RuntimeWarning: divide by zero encountered in double_scalars
  lc.sticky_edges.x[:] = [grid.x_origin, grid.x_origin + grid.width]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:220: RuntimeWarning: divide by zero encountered in double_scalars
  lc.sticky_edges.y[:] = [grid.y_origin, grid.y_origin + grid.height]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:2521: RuntimeWarning: divide by zero encountered in isfinite
  finite_dl = [d for d in dl if np.isfinite(d).all()]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:2526: RuntimeWarning: divide by zero encountered in isfinite
  if (np.isfinite(d.intervalx).all() and
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:2529: RuntimeWarning: divide by zero encountered in isfinite
  if (np.isfinite(d.intervaly).all() and
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:2550: RuntimeWarning: divide by zero encountered in int_scalars
  i0 = stickies.searchsorted(x0 + tol) - 1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:2563: RuntimeWarning: divide by zero encountered in double_scalars
  delta = (x1t - x0t) * margin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:2564: RuntimeWarning: divide by zero encountered in isfinite
  if not np.isfinite(delta):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:2566: RuntimeWarning: divide by zero encountered in double_scalars
  x0, x1 = inverse_trans.transform([x0t - delta, x1t + delta])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:594: RuntimeWarning: divide by zero encountered in double_scalars
  ds = min(maxds, 0.85 * ds * (maxerror / error) ** 0.5)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:616: RuntimeWarning: divide by zero encountered in double_scalars
  dsy = (ny - 1 - yi) / cy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\streamplot.py:614: RuntimeWarning: divide by zero encountered in double_scalars
  dsy = yi / -cy
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in multiply
  
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in square
  
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in negative
  
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:87: RuntimeWarning: divide by zero encountered in reduce
  return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1977: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 2] += tx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1978: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 2] += ty
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1712: RuntimeWarning: divide by zero encountered in equal
  return np.all(self.get_matrix() == other.get_matrix())
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:3210: RuntimeWarning: divide by zero encountered in isfinite
  and not np.isfinite(converted_limit)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2792: RuntimeWarning: divide by zero encountered in isfinite
  if (not np.isfinite(vmin)) or (not np.isfinite(vmax)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2805: RuntimeWarning: divide by zero encountered in double_scalars
  if maxabsvalue < (1e6 / tiny) * np.finfo(float).tiny:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1996: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 0] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1997: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 1] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1998: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 2] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1999: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 0] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2000: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 1] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2001: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 2] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:379: RuntimeWarning: divide by zero encountered in double_scalars
  return (x0, y0, x1 - x0, y1 - y0)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2531: RuntimeWarning: divide by zero encountered in double_scalars
  length = ((ends[1][1] - ends[0][1]) / self.axes.figure.dpi) * 72
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2535: RuntimeWarning: divide by zero encountered in double_scalars
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2535: RuntimeWarning: divide by zero encountered in floor
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:96: RuntimeWarning: divide by zero encountered in isnan
  return um.isnan(a)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:112: RuntimeWarning: divide by zero encountered in clip
  return ufunc(*args, out=out, **kwargs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2050: RuntimeWarning: divide by zero encountered in true_divide
  scale = 10 ** (math.log10(dv / n) // 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2246: RuntimeWarning: divide by zero encountered in true_divide
  raw_step = (_vmax - _vmin) / nbins
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2247: RuntimeWarning: divide by zero encountered in multiply
  steps = self._extended_steps * scale
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2253: RuntimeWarning: divide by zero encountered in greater_equal
  istep = np.nonzero(steps >= raw_step)[0][0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2265: RuntimeWarning: divide by zero encountered in int_scalars
  for istep in reversed(range(istep + 1)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2271: RuntimeWarning: divide by zero encountered in double_scalars
  best_vmin = (_vmin // step) * step
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2278: RuntimeWarning: divide by zero encountered in double_scalars
  low = edge.le(_vmin - best_vmin)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2084: RuntimeWarning: divide by zero encountered in double_scalars
  d, m = divmod(x, self.step)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2085: RuntimeWarning: divide by zero encountered in double_scalars
  if self.closeto(m / self.step, 1):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2080: RuntimeWarning: divide by zero encountered in double_scalars
  return abs(ms - edge) < tol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2279: RuntimeWarning: divide by zero encountered in double_scalars
  high = edge.ge(_vmax - best_vmin)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2091: RuntimeWarning: divide by zero encountered in double_scalars
  d, m = divmod(x, self.step)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2092: RuntimeWarning: divide by zero encountered in double_scalars
  if self.closeto(m / self.step, 0):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2094: RuntimeWarning: divide by zero encountered in double_scalars
  return d + 1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2280: RuntimeWarning: divide by zero encountered in double_scalars
  ticks = np.arange(low, high + 1) * step + best_vmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2280: RuntimeWarning: divide by zero encountered in multiply
  ticks = np.arange(low, high + 1) * step + best_vmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2280: RuntimeWarning: divide by zero encountered in add
  ticks = np.arange(low, high + 1) * step + best_vmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2282: RuntimeWarning: divide by zero encountered in less_equal
  nticks = ((ticks <= _vmax) & (ticks >= _vmin)).sum()
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2282: RuntimeWarning: divide by zero encountered in greater_equal
  nticks = ((ticks <= _vmax) & (ticks >= _vmin)).sum()
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2282: RuntimeWarning: divide by zero encountered in bitwise_and
  nticks = ((ticks <= _vmax) & (ticks >= _vmin)).sum()
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:47: RuntimeWarning: divide by zero encountered in reduce
  return umr_sum(a, axis, dtype, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2285: RuntimeWarning: divide by zero encountered in add
  return ticks + offset
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel\pylab\backend_inline.py:195: RuntimeWarning: divide by zero encountered in greater
  return rgbaArr[:,:3].dot((.299, .587, .114)) > .5
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel\pylab\backend_inline.py:184: RuntimeWarning: divide by zero encountered in equal
  if ticksLight.size and (ticksLight == ticksLight[0]).all():
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:62: RuntimeWarning: divide by zero encountered in reduce
  return umr_all(a, axis, dtype, out, keepdims)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:373: RuntimeWarning: divide by zero encountered in subtract
  return points[1] - points[0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:813: RuntimeWarning: divide by zero encountered in double_scalars
  return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:993: RuntimeWarning: divide by zero encountered in not_equal
  if np.any(self._points != other.get_points()):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\figure.py:2562: RuntimeWarning: divide by zero encountered in double_scalars
  w_pad = w_pad / width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\figure.py:2563: RuntimeWarning: divide by zero encountered in double_scalars
  h_pad = h_pad / height
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:243: RuntimeWarning: divide by zero encountered in int_scalars
  hassubplotspec[ss0.num1:(ss0.num2 + 1)] = True
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:1296: RuntimeWarning: divide by zero encountered in double_scalars
  tol = (hi - lo) * 1e-5
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:43: RuntimeWarning: divide by zero encountered in reduce
  return umr_minimum(a, axis, None, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:39: RuntimeWarning: divide by zero encountered in reduce
  return umr_maximum(a, axis, None, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2076: RuntimeWarning: divide by zero encountered in double_scalars
  (x, bottom - self.labelpad * self.figure.dpi / 72)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2108: RuntimeWarning: divide by zero encountered in double_scalars
  y = bottom - self.OFFSETTEXTPAD * self.figure.dpi / 72
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:361: RuntimeWarning: divide by zero encountered in double_scalars
  return points[1, 0] - points[0, 0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2367: RuntimeWarning: divide by zero encountered in double_scalars
  (left - self.labelpad * self.figure.dpi / 72, y)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2393: RuntimeWarning: divide by zero encountered in double_scalars
  (x, top + self.OFFSETTEXTPAD * self.figure.dpi / 72)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:367: RuntimeWarning: divide by zero encountered in double_scalars
  return points[1, 1] - points[0, 1]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:678: RuntimeWarning: divide by zero encountered in maximum
  x0 = np.maximum(bbox1.xmin, bbox2.xmin)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:679: RuntimeWarning: divide by zero encountered in minimum
  x1 = np.minimum(bbox1.xmax, bbox2.xmax)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:680: RuntimeWarning: divide by zero encountered in maximum
  y0 = np.maximum(bbox1.ymin, bbox2.ymin)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:681: RuntimeWarning: divide by zero encountered in minimum
  y1 = np.minimum(bbox1.ymax, bbox2.ymax)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:4196: RuntimeWarning: divide by zero encountered in equal
  if np.all(clip_extent.extents == axbbox.extents):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\spines.py:195: RuntimeWarning: divide by zero encountered in double_scalars
  bb0.x0 = bb0.x0 - padout
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\spines.py:196: RuntimeWarning: divide by zero encountered in double_scalars
  bb0.x1 = bb0.x1 + padin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\spines.py:198: RuntimeWarning: divide by zero encountered in double_scalars
  bb0.y0 = bb0.y0 - padout
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\spines.py:199: RuntimeWarning: divide by zero encountered in double_scalars
  bb0.y1 = bb0.y1 + padin
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\arraysetops.py:327: RuntimeWarning: divide by zero encountered in not_equal
  mask[1:] = aux[1:] != aux[:-1]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\arraysetops.py:432: RuntimeWarning: divide by zero encountered in equal
  mask = aux[1:] == aux[:-1]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:594: RuntimeWarning: divide by zero encountered in not_equal
  xys = self.vertices[self.codes != Path.CLOSEPOLY]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:272: RuntimeWarning: divide by zero encountered in isfinite
  if not (np.isfinite(bbox.width) and np.isfinite(bbox.height)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:283: RuntimeWarning: divide by zero encountered in double_scalars
  ax._poslayoutbox.edit_left_margin_min(-bbox.x0 + pos.x0 + w_padt)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:284: RuntimeWarning: divide by zero encountered in double_scalars
  ax._poslayoutbox.edit_right_margin_min(bbox.x1 - pos.x1 + w_padt)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:285: RuntimeWarning: divide by zero encountered in double_scalars
  ax._poslayoutbox.edit_bottom_margin_min(-bbox.y0 + pos.y0 + h_padt)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:286: RuntimeWarning: divide by zero encountered in double_scalars
  ax._poslayoutbox.edit_top_margin_min(bbox.y1-pos.y1+h_padt)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:287: RuntimeWarning: divide by zero encountered in double_scalars
  _log.debug('left %f', (-bbox.x0 + pos.x0 + w_pad))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:288: RuntimeWarning: divide by zero encountered in double_scalars
  _log.debug('right %f', (bbox.x1 - pos.x1 + w_pad))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:289: RuntimeWarning: divide by zero encountered in double_scalars
  _log.debug('bottom %f', (-bbox.y0 + pos.y0 + h_padt))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:802: RuntimeWarning: divide by zero encountered in less_equal
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:802: RuntimeWarning: divide by zero encountered in bitwise_and
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:850: RuntimeWarning: divide by zero encountered in less_equal
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:850: RuntimeWarning: divide by zero encountered in bitwise_and
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:851: RuntimeWarning: divide by zero encountered in absolute
  locs = np.abs(locs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:880: RuntimeWarning: divide by zero encountered in subtract
  locs = (np.asarray(_locs) - self.offset) / 10. ** self.orderOfMagnitude
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:880: RuntimeWarning: divide by zero encountered in true_divide
  locs = (np.asarray(_locs) - self.offset) / 10. ** self.orderOfMagnitude
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:275: RuntimeWarning: divide by zero encountered in reduce
  umr_maximum(a, axis, None, out, keepdims),
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:276: RuntimeWarning: divide by zero encountered in reduce
  umr_minimum(a, axis, None, None, keepdims),
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:277: RuntimeWarning: divide by zero encountered in subtract
  out
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:58: RuntimeWarning: divide by zero encountered in multiply
  return bound(*args, **kwds)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:58: RuntimeWarning: divide by zero encountered in rint
  return bound(*args, **kwds)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:58: RuntimeWarning: divide by zero encountered in true_divide
  return bound(*args, **kwds)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:897: RuntimeWarning: divide by zero encountered in subtract
  if np.abs(locs - np.round(locs, decimals=sigfigs)).max() < thresh:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:897: RuntimeWarning: divide by zero encountered in absolute
  if np.abs(locs - np.round(locs, decimals=sigfigs)).max() < thresh:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:659: RuntimeWarning: divide by zero encountered in double_scalars
  xp = (x - self.offset) / (10. ** self.orderOfMagnitude)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2869: RuntimeWarning: divide by zero encountered in double_scalars
  rtol = (b - a) * rtol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2870: RuntimeWarning: divide by zero encountered in double_scalars
  return a - rtol <= val <= b + rtol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2870: RuntimeWarning: divide by zero encountered in less_equal
  return a - rtol <= val <= b + rtol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:360: RuntimeWarning: divide by zero encountered in double_scalars
  width = xmax - xmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:361: RuntimeWarning: divide by zero encountered in double_scalars
  height = ymax - ymin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:373: RuntimeWarning: divide by zero encountered in double_scalars
  offsetx = (xmin + xmax) / 2
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:413: RuntimeWarning: divide by zero encountered in double_scalars
  xmin -= offsetx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:414: RuntimeWarning: divide by zero encountered in double_scalars
  ymin -= offsety
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:419: RuntimeWarning: divide by zero encountered in subtract
  xys = M.transform(offset_layout) - (offsetx, offsety)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2587: RuntimeWarning: divide by zero encountered in double_scalars
  x_scale = 1.0 / inw
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2588: RuntimeWarning: divide by zero encountered in double_scalars
  y_scale = 1.0 / inh
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2589: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx = np.array([[x_scale, 0.0    , (-inl*x_scale)],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2590: RuntimeWarning: divide by zero encountered in double_scalars
  [0.0    , y_scale, (-inb*y_scale)],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:635: RuntimeWarning: divide by zero encountered in add
  return Bbox(self._points + (tx, ty))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:386: RuntimeWarning: divide by zero encountered in double_scalars
  offsety = ymin + height - baseline / 2.0
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\mathtext.py:1701: RuntimeWarning: divide by zero encountered in isinf
  if not np.isinf(p.height) and not np.isinf(p.depth):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\mathtext.py:464: RuntimeWarning: divide by zero encountered in ceil
  self.width, self.height, self.depth = np.ceil([w, h, d])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\mathtext.py:159: RuntimeWarning: divide by zero encountered in ceil
  self.image = FT2Image(np.ceil(w), np.ceil(h + max(d, 0)))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:384: RuntimeWarning: divide by zero encountered in double_scalars
  offsety = ymin + descent
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:4180: RuntimeWarning: divide by zero encountered in double_scalars
  bt.x0 = (bt.x0 + bt.x1) / 2 - 0.5
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:4181: RuntimeWarning: divide by zero encountered in double_scalars
  bt.x1 = bt.x0 + 1.0
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\gridspec.py:740: RuntimeWarning: divide by zero encountered in int_scalars
  return range(self.num1 // ncols, self.num2 // ncols + 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\gridspec.py:748: RuntimeWarning: divide by zero encountered in int_scalars
  c1, c2 = sorted([self.num1 % ncols, self.num2 % ncols])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\gridspec.py:749: RuntimeWarning: divide by zero encountered in int_scalars
  return range(c1, c2 + 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:339: RuntimeWarning: divide by zero encountered in double_scalars
  heights.append(sum(height_ratios[rowspan.start:rowspan.stop]))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\_constrained_layout.py:340: RuntimeWarning: divide by zero encountered in double_scalars
  widths.append(sum(width_ratios[colspan.start:colspan.stop]))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2516: RuntimeWarning: divide by zero encountered in double_scalars
  x12, y12 = (x1 + x2) / 2., (y1 + y2) / 2.
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2517: RuntimeWarning: divide by zero encountered in double_scalars
  dx, dy = x2 - x1, y2 - y1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2521: RuntimeWarning: divide by zero encountered in double_scalars
  cx, cy = x12 + f * dy, y12 - f * dx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:416: RuntimeWarning: divide by zero encountered in double_scalars
  return (x - cx) ** 2 + (y - cy) ** 2 < r2
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:361: RuntimeWarning: divide by zero encountered in not_equal
  if inside(ctl_points[-2:]) != begin_inside:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2992: RuntimeWarning: divide by zero encountered in hypot
  head_dist = np.hypot(head_length, head_width)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2993: RuntimeWarning: divide by zero encountered in double_scalars
  cos_t, sin_t = head_length / head_dist, head_width / head_dist
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2956: RuntimeWarning: divide by zero encountered in double_scalars
  dx, dy = x0 - x1, y0 - y1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2958: RuntimeWarning: divide by zero encountered in hypot
  cp_distance = np.hypot(dx, dy)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2962: RuntimeWarning: divide by zero encountered in double_scalars
  pad_projected = (.5 * linewidth / sin_t)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2969: RuntimeWarning: divide by zero encountered in double_scalars
  ddx = pad_projected * dx / cp_distance
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2970: RuntimeWarning: divide by zero encountered in double_scalars
  ddy = pad_projected * dy / cp_distance
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2973: RuntimeWarning: divide by zero encountered in double_scalars
  dx = dx / cp_distance * head_dist
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2974: RuntimeWarning: divide by zero encountered in double_scalars
  dy = dy / cp_distance * head_dist
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2976: RuntimeWarning: divide by zero encountered in double_scalars
  dx1, dy1 = cos_t * dx + sin_t * dy, -sin_t * dx + cos_t * dy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2977: RuntimeWarning: divide by zero encountered in double_scalars
  dx2, dy2 = cos_t * dx - sin_t * dy, sin_t * dx + cos_t * dy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2979: RuntimeWarning: divide by zero encountered in double_scalars
  vertices_arrow = [(x1 + ddx + dx1, y1 + ddy + dy1),
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2980: RuntimeWarning: divide by zero encountered in double_scalars
  (x1 + ddx, y1 + ddy),
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:2981: RuntimeWarning: divide by zero encountered in double_scalars
  (x1 + ddx + dx2, y1 + ddy + dy2)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:3023: RuntimeWarning: divide by zero encountered in double_scalars
  _path = [Path(np.concatenate([[(x0 + ddxA, y0 + ddyA)],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:3025: RuntimeWarning: divide by zero encountered in double_scalars
  [(x3 + ddxB, y3 + ddyB)]]),
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:689: RuntimeWarning: divide by zero encountered in isfinite
  if not np.isfinite(posx) or not np.isfinite(posy):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:709: RuntimeWarning: divide by zero encountered in double_scalars
  x = x + posx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:710: RuntimeWarning: divide by zero encountered in double_scalars
  y = y + posy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:712: RuntimeWarning: divide by zero encountered in double_scalars
  y = canvash - y
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:339: RuntimeWarning: divide by zero encountered in not_equal
  not_stop_mask = codes != cls.STOP
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:199: RuntimeWarning: divide by zero encountered in multiply
  self._px = (self._cpoints.T * coeff).T
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:216: RuntimeWarning: divide by zero encountered in subtract
  return (np.power.outer(1 - t, self._orders[::-1])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:216: RuntimeWarning: divide by zero encountered in power
  return (np.power.outer(1 - t, self._orders[::-1])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:217: RuntimeWarning: divide by zero encountered in power
  * np.power.outer(t, self._orders)) @ self._px
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:217: RuntimeWarning: divide by zero encountered in multiply
  * np.power.outer(t, self._orders)) @ self._px
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:217: RuntimeWarning: divide by zero encountered in matmul
  * np.power.outer(t, self._orders)) @ self._px
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:271: RuntimeWarning: divide by zero encountered in add
  prefactor = (-1)**(i + j) * _comb(j, i)  # j on axis 0, i on axis 1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:271: RuntimeWarning: divide by zero encountered in power
  prefactor = (-1)**(i + j) * _comb(j, i)  # j on axis 0, i on axis 1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:20: RuntimeWarning: divide by zero encountered in long_scalars
  k = min(k, n - k)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:21: RuntimeWarning: divide by zero encountered in long_scalars
  i = np.arange(1, k + 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:22: RuntimeWarning: divide by zero encountered in long_scalars
  return np.prod((n + 1 - i)/i).astype(int)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:22: RuntimeWarning: divide by zero encountered in subtract
  return np.prod((n + 1 - i)/i).astype(int)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:22: RuntimeWarning: divide by zero encountered in true_divide
  return np.prod((n + 1 - i)/i).astype(int)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\function_base.py:2197: RuntimeWarning: divide by zero encountered in _comb (vectorized)
  outputs = ufunc(*inputs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:271: RuntimeWarning: divide by zero encountered in multiply
  prefactor = (-1)**(i + j) * _comb(j, i)  # j on axis 0, i on axis 1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:272: RuntimeWarning: divide by zero encountered in multiply
  return _comb(n, j) * prefactor @ P  # j on axis 0, self.dimension on 1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:272: RuntimeWarning: divide by zero encountered in matmul
  return _comb(n, j) * prefactor @ P  # j on axis 0, self.dimension on 1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:294: RuntimeWarning: divide by zero encountered in multiply
  dCj = np.arange(1, n+1)[:, None] * Cj[1:]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\polynomial.py:241: RuntimeWarning: divide by zero encountered in int_scalars
  trailing_zeros = len(p) - non_zero[-1] - 1
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\polynomial.py:254: RuntimeWarning: divide by zero encountered in negative
  A[0,:] = -p[1:] / p[0]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\polynomial.py:254: RuntimeWarning: divide by zero encountered in true_divide
  A[0,:] = -p[1:] / p[0]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\linalg\linalg.py:207: RuntimeWarning: divide by zero encountered in isfinite
  if not isfinite(a).all():
C:\Users\Ali\anaconda3\lib\site-packages\numpy\linalg\linalg.py:1071: RuntimeWarning: divide by zero encountered in equal
  if all(w.imag == 0):
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\type_check.py:276: RuntimeWarning: divide by zero encountered in equal
  return imag(x) == 0
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:303: RuntimeWarning: divide by zero encountered in greater_equal
  in_range = np.isreal(roots) & (roots >= 0) & (roots <= 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:303: RuntimeWarning: divide by zero encountered in bitwise_and
  in_range = np.isreal(roots) & (roots >= 0) & (roots <= 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\bezier.py:303: RuntimeWarning: divide by zero encountered in less_equal
  in_range = np.isreal(roots) & (roots >= 0) & (roots <= 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\figure.py:2521: RuntimeWarning: divide by zero encountered in isfinite
  if (np.isfinite(b.width) and np.isfinite(b.height)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:631: RuntimeWarning: divide by zero encountered in add
  return Bbox(points + [[-p, -p], [p, p]])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\tight_bbox.py:65: RuntimeWarning: divide by zero encountered in double_scalars
  w1, h1 = fig.bbox.width * dpi_scale, fig.bbox.height * dpi_scale
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\tight_bbox.py:71: RuntimeWarning: divide by zero encountered in double_scalars
  fig.patch.set_bounds(x0 / w1, y0 / h1,
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\tight_bbox.py:72: RuntimeWarning: divide by zero encountered in double_scalars
  fig.bbox.width / w1, fig.bbox.height / h1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:778: RuntimeWarning: divide by zero encountered in double_scalars
  self._x1 = self._x0 + self._width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\patches.py:781: RuntimeWarning: divide by zero encountered in double_scalars
  self._y1 = self._y0 + self._height
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:211: RuntimeWarning: divide by zero encountered in double_scalars
  x = round(x + xo + xd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:211: RuntimeWarning: divide by zero encountered in rint
  x = round(x + xo + xd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:212: RuntimeWarning: divide by zero encountered in double_scalars
  y = round(y + yo + yd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:212: RuntimeWarning: divide by zero encountered in rint
  y = round(y + yo + yd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:184: RuntimeWarning: divide by zero encountered in double_scalars
  x = round(x + ox + xd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:184: RuntimeWarning: divide by zero encountered in rint
  x = round(x + ox + xd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:185: RuntimeWarning: divide by zero encountered in double_scalars
  y = round(y - oy + yd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:185: RuntimeWarning: divide by zero encountered in rint
  y = round(y - oy + yd)
../_images/visualise_1_14.png

To find an equation governing each streamline, we assume a parameterisation of the form \(\underline{x}(s)=(x(s),y(s)_,z(s))\). Since the streamline is tangent to the velocity field it must satisfy the following equation, where \(t\) is treated as constant:

(3.11)\[\begin{equation}\frac{\mathrm{d}\underline{x}}{\mathrm{d}s}=\underline{v}(\underline{x},t).\end{equation}\]

Integrating the problem gives a family of streamlines. For the example given in equation (3.10), the streamlines satisfy

(3.12)\[\begin{equation}\frac{\mathrm{d}x}{\mathrm{d}s}=1, \quad \frac{\mathrm{d}y}{\mathrm{d}s}=-2te^{-t^2}.\end{equation}\]

The solution that passes through a given point \((x_0,y_0)\) is given by

(3.13)\[\begin{equation}\underline{x}=(x_0+s, y_0-2te^{-t^2}s).\end{equation}\]

Exercise 3.4

Find a parameterisation governing the streamlines of the flow \(\underline{v}=(2x,2yt)\).

3.3.2. The stream function

The stream function is a useful mathematical tool that can be used to find the streamlines for some types of flow. It applies only to two-dimensional flows \(\underline{v}(\underline{x},t)\) that satisfy \(\nabla.\underline{v}=0\). The latter condition means that the fluid is incompressible. We will explore the incompressibility condition in later sections of the notes.

The stream function \(\psi(x,y)\) satisfies

(3.14)\[\underline{v}=\left(\frac{\partial\psi}{\partial y},-\frac{\partial\psi}{\partial x}\right)\]

The incompressibility condition \(\nabla.\underline{v}=0\) is required for consistency, due to the equivalence of the mixed second derivatives (Schwarz’ condition):

(3.15)\[\begin{equation}\nabla.\underline{v}=\frac{\partial^2\psi}{\partial x\partial y}-\frac{\partial^2 \psi}{\partial y\partial x}=0\end{equation}\]

The stream function also satisfies \(\underline{v}.\nabla\psi=0\) :

(3.16)\[\begin{equation}\underline{v}.\nabla\psi=\frac{\partial\psi}{\partial y}\frac{\partial\psi}{\partial x}+ \left(-\frac{\partial\psi}{\partial x}\right)\frac{\partial\psi}{\partial y}=0\end{equation}\]

Therefore, \(\nabla\psi\) is perpendicular to \(\underline{v}\), and so the contours of \(\psi\) are parallel to \(\underline{v}\).

In conclusion, the contours of \(\psi\) are streamlines of the flow.

Exercise 3.5

Find the stream function for the flow \(\underline{v}=\left(x^2y,-xy^2\right)\).
Use the stream function to produce a contour plot of the flow on \(-2\leq x,y\leq 2\).

Note: Some three-dimensional flows can also be treated as two-dimensional. This is the case for flows that are axisymmetric, meaning that they are symmetric about a given axis. An example of an axisymmetric flow is shown in the image below, which is from another CFD simulation produced using the commercial software COMSOL.


alternative text

3.3.3. Particle paths

The streamlines indicate the direction of motion of fluid particles at a given moment. If the fluid is not steady (time-independent), then the streamlines do not show the paths taken by the fluid particles. This is illustrated by the below animation, which tracks several selected fluid particles as they move tangent to the evolving velocity field given in equation (3.10).

import numpy as np
import matplotlib.pyplot as plt

from matplotlib import animation, rc
from IPython.display import HTML

n = 15
xgrid=np.linspace(1,3,n)
ygrid=np.linspace(0,2,n)
X, Y = np.meshgrid(xgrid, ygrid)

t=0
U=np.ones(X.shape)
V=-2*t*np.exp(-t**2)*np.ones(X.shape)
tmax,fnum=3,100

def x(t0,t):
  return t+(1-t0)

def y(t0,t,y0):
  return y0+np.exp(-t**2)-np.exp(-t0**2)

#x = np.linspace(1, 3, 1000)

class testAnimation:

  def __init__(self):
    # First set up the figure, the axis, and the plot element we want to animate
    self.fig, ax = plt.subplots()
    plt.close()
    ax.set_xlim(( 1, 3))
    ax.set_ylim((0, 2))
    self.UVC = ax.quiver(X,Y,U,V)
    self.scat, = ax.plot([], [],'o', color='blue')

  # initialization function: plot the background of each frame
  def init(self):
      return (self.UVC, self.scat)

  # animation function. This is called sequentially  
  def animate(self, i):
      t=tmax/fnum*i;
      V=-2*t*np.exp(-t**2)*np.ones(X.shape)
      self.UVC.set_UVC(U,V)
      tgrid=np.arange(0,t,0.5)
      self.scat.set_data(x(0,t), y(0,t,np.linspace(0,2,10)))
      return (self.UVC, self.scat)

  def draw(self):
    global anim
    anim = animation.FuncAnimation(self.fig, self.animate, init_func=self.init,
                             frames=fnum, interval=1000*tmax/fnum, blit=True)


vis = testAnimation()
vis.draw()

# Note: below is the part which makes it work on Colab
rc('animation', html='jshtml')

#anim.save('fluid.gif', writer = 'imagemagick', fps=10)

anim
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:127: RuntimeWarning: divide by zero encountered in multiply
  start = asanyarray(start) * 1.0
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:128: RuntimeWarning: divide by zero encountered in multiply
  stop  = asanyarray(stop)  * 1.0
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:134: RuntimeWarning: divide by zero encountered in double_scalars
  delta = stop - start
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:141: RuntimeWarning: divide by zero encountered in double_scalars
  step = delta / div
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:56: RuntimeWarning: divide by zero encountered in reduce
  return umr_any(a, axis, dtype, out, keepdims)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:151: RuntimeWarning: divide by zero encountered in multiply
  y *= step
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:161: RuntimeWarning: divide by zero encountered in add
  y += start
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in exp
  
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in double_scalars
  
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in multiply
  
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\figure.py:321: RuntimeWarning: divide by zero encountered in isfinite
  if not np.isfinite(figsize).all() or (np.array(figsize) < 0).any():
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\figure.py:321: RuntimeWarning: divide by zero encountered in less
  if not np.isfinite(figsize).all() or (np.array(figsize) < 0).any():
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\gridspec.py:203: RuntimeWarning: divide by zero encountered in subtract
  fig_tops, fig_bottoms = (top - cell_hs).reshape((-1, 2)).T
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\gridspec.py:204: RuntimeWarning: divide by zero encountered in add
  fig_lefts, fig_rights = (left + cell_ws).reshape((-1, 2)).T
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\function_base.py:1281: RuntimeWarning: divide by zero encountered in subtract
  a = op(a[slice1], a[slice2])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2165: RuntimeWarning: divide by zero encountered in less_equal
  if np.any(np.diff(steps) <= 0) or steps[-1] > 10 or steps[0] < 1:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2179: RuntimeWarning: divide by zero encountered in multiply
  flights = (0.1 * steps[:-1], steps, 10 * steps[1])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2179: RuntimeWarning: divide by zero encountered in double_scalars
  flights = (0.1 * steps[:-1], steps, 10 * steps[1])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\lines.py:70: RuntimeWarning: divide by zero encountered in long_scalars
  scaled_offset = offset * lw
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:2365: RuntimeWarning: divide by zero encountered in isfinite
  condition = ~(np.isfinite(a))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:2365: RuntimeWarning: divide by zero encountered in invert
  condition = ~(np.isfinite(a))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1753: RuntimeWarning: divide by zero encountered in logical_or
  return make_mask(umath.logical_or(m1, m2), copy=copy, shrink=shrink)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:2142: RuntimeWarning: divide by zero encountered in isfinite
  if not np.any(np.isfinite(xys)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:799: RuntimeWarning: divide by zero encountered in sqrt
  SQRTHALF = np.sqrt(0.5)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:800: RuntimeWarning: divide by zero encountered in double_scalars
  MAGIC45 = SQRTHALF * MAGIC
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:805: RuntimeWarning: divide by zero encountered in double_scalars
  [SQRTHALF-MAGIC45, -SQRTHALF-MAGIC45],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:808: RuntimeWarning: divide by zero encountered in double_scalars
  [SQRTHALF+MAGIC45, -SQRTHALF+MAGIC45],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:813: RuntimeWarning: divide by zero encountered in double_scalars
  [SQRTHALF+MAGIC45, SQRTHALF-MAGIC45],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:816: RuntimeWarning: divide by zero encountered in double_scalars
  [SQRTHALF-MAGIC45, SQRTHALF+MAGIC45],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:821: RuntimeWarning: divide by zero encountered in double_scalars
  [-SQRTHALF+MAGIC45, SQRTHALF+MAGIC45],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:824: RuntimeWarning: divide by zero encountered in double_scalars
  [-SQRTHALF-MAGIC45, SQRTHALF-MAGIC45],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:829: RuntimeWarning: divide by zero encountered in double_scalars
  [-SQRTHALF-MAGIC45, -SQRTHALF+MAGIC45],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:832: RuntimeWarning: divide by zero encountered in double_scalars
  [-SQRTHALF+MAGIC45, -SQRTHALF-MAGIC45],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:842: RuntimeWarning: divide by zero encountered in multiply
  return Path(vertices * radius + center, codes, readonly=readonly)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\path.py:842: RuntimeWarning: divide by zero encountered in add
  return Path(vertices * radius + center, codes, readonly=readonly)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:541: RuntimeWarning: divide by zero encountered in double_scalars
  self.width = 0.06 * self.span / sn
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:648: RuntimeWarning: divide by zero encountered in multiply
  uv = (U + V * 1j)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:648: RuntimeWarning: divide by zero encountered in add
  uv = (U + V * 1j)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:664: RuntimeWarning: divide by zero encountered in absolute
  a = np.abs(uv)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:75: RuntimeWarning: divide by zero encountered in int_scalars
  items *= arr.shape[mu.normalize_axis_index(ax, arr.ndim)]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:178: RuntimeWarning: divide by zero encountered in reduce
  ret = umr_sum(arr, axis, dtype, out, keepdims, where=where)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:188: RuntimeWarning: divide by zero encountered in double_scalars
  ret = ret.dtype.type(ret / rcount)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:673: RuntimeWarning: divide by zero encountered in double_scalars
  scale = 1.8 * amean * sn / self.span
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:686: RuntimeWarning: divide by zero encountered in double_scalars
  length = a * (widthu_per_lenu / (self.scale * self.width))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:686: RuntimeWarning: divide by zero encountered in multiply
  length = a * (widthu_per_lenu / (self.scale * self.width))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:721: RuntimeWarning: divide by zero encountered in multiply
  x = x + np.array([0, 1, 1, 1]) * length
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:721: RuntimeWarning: divide by zero encountered in add
  x = x + np.array([0, 1, 1, 1]) * length
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:722: RuntimeWarning: divide by zero encountered in multiply
  y = 0.5 * np.array([1, 1, self.headwidth, 0], np.float64)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:727: RuntimeWarning: divide by zero encountered in multiply
  y0 = 0.5 * np.array([1, 1, self.headwidth, 0], np.float64)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:731: RuntimeWarning: divide by zero encountered in multiply
  Y[:, 3:-1] *= -1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:734: RuntimeWarning: divide by zero encountered in multiply
  Y0[3:-1] *= -1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:735: RuntimeWarning: divide by zero encountered in true_divide
  shrink = length / minsh if minsh != 0. else 0.
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:736: RuntimeWarning: divide by zero encountered in multiply
  X0 = shrink * X0[np.newaxis, :]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:737: RuntimeWarning: divide by zero encountered in multiply
  Y0 = shrink * Y0[np.newaxis, :]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:738: RuntimeWarning: divide by zero encountered in less
  short = np.repeat(length < minsh, 8, axis=1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:751: RuntimeWarning: divide by zero encountered in less
  tooshort = length < self.minlength
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\function_base.py:1482: RuntimeWarning: divide by zero encountered in arctan2
  a = arctan2(zimag, zreal)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:695: RuntimeWarning: divide by zero encountered in multiply
  xy = (X + Y * 1j) * np.exp(1j * theta) * self.width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:695: RuntimeWarning: divide by zero encountered in add
  xy = (X + Y * 1j) * np.exp(1j * theta) * self.width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:695: RuntimeWarning: divide by zero encountered in exp
  xy = (X + Y * 1j) * np.exp(1j * theta) * self.width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\collections.py:922: RuntimeWarning: divide by zero encountered in sqrt
  scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\collections.py:922: RuntimeWarning: divide by zero encountered in multiply
  scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\collections.py:922: RuntimeWarning: divide by zero encountered in true_divide
  scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2246: RuntimeWarning: divide by zero encountered in double_scalars
  length = ((ends[1][0] - ends[0][0]) / self.axes.figure.dpi) * 72
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2251: RuntimeWarning: divide by zero encountered in double_scalars
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2251: RuntimeWarning: divide by zero encountered in floor
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:820: RuntimeWarning: divide by zero encountered in ceil
  oom_max = np.ceil(math.log10(abs_max))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:821: RuntimeWarning: divide by zero encountered in double_scalars
  oom = 1 + next(oom for oom in itertools.count(oom_max, -1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:822: RuntimeWarning: divide by zero encountered in double_scalars
  if abs_min // 10 ** oom != abs_max // 10 ** oom)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:823: RuntimeWarning: divide by zero encountered in double_scalars
  if (abs_max - abs_min) / 10 ** oom <= 1e-2:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:833: RuntimeWarning: divide by zero encountered in double_scalars
  if abs_max // 10 ** oom >= 10**n
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\animation.py:91: RuntimeWarning: divide by zero encountered in double_scalars
  wnew = int(w * dpi / n) * n / dpi
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\animation.py:92: RuntimeWarning: divide by zero encountered in double_scalars
  hnew = int(h * dpi / n) * n / dpi
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\animation.py:226: RuntimeWarning: divide by zero encountered in double_scalars
  return int(w * self.dpi), int(h * self.dpi)
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:43: RuntimeWarning: divide by zero encountered in exp
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:43: RuntimeWarning: divide by zero encountered in double_scalars
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:43: RuntimeWarning: divide by zero encountered in multiply
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:2365: RuntimeWarning: divide by zero encountered in isfinite
  condition = ~(np.isfinite(a))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:2365: RuntimeWarning: divide by zero encountered in invert
  condition = ~(np.isfinite(a))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1753: RuntimeWarning: divide by zero encountered in logical_or
  return make_mask(umath.logical_or(m1, m2), copy=copy, shrink=shrink)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:56: RuntimeWarning: divide by zero encountered in reduce
  return umr_any(a, axis, dtype, out, keepdims)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:127: RuntimeWarning: divide by zero encountered in multiply
  start = asanyarray(start) * 1.0
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:128: RuntimeWarning: divide by zero encountered in multiply
  stop  = asanyarray(stop)  * 1.0
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:134: RuntimeWarning: divide by zero encountered in double_scalars
  delta = stop - start
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:141: RuntimeWarning: divide by zero encountered in double_scalars
  step = delta / div
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:151: RuntimeWarning: divide by zero encountered in multiply
  y *= step
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\function_base.py:161: RuntimeWarning: divide by zero encountered in add
  y += start
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:21: RuntimeWarning: divide by zero encountered in exp
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:21: RuntimeWarning: divide by zero encountered in add
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:21: RuntimeWarning: divide by zero encountered in subtract
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:373: RuntimeWarning: divide by zero encountered in subtract
  return points[1] - points[0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:993: RuntimeWarning: divide by zero encountered in not_equal
  if np.any(self._points != other.get_points()):
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:87: RuntimeWarning: divide by zero encountered in reduce
  return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1977: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 2] += tx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1978: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 2] += ty
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:379: RuntimeWarning: divide by zero encountered in double_scalars
  return (x0, y0, x1 - x0, y1 - y0)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:813: RuntimeWarning: divide by zero encountered in double_scalars
  return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:361: RuntimeWarning: divide by zero encountered in double_scalars
  return points[1, 0] - points[0, 0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1996: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 0] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1997: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 1] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1998: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 2] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1999: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 0] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2000: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 1] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2001: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 2] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:648: RuntimeWarning: divide by zero encountered in multiply
  uv = (U + V * 1j)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:648: RuntimeWarning: divide by zero encountered in add
  uv = (U + V * 1j)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:664: RuntimeWarning: divide by zero encountered in absolute
  a = np.abs(uv)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:686: RuntimeWarning: divide by zero encountered in double_scalars
  length = a * (widthu_per_lenu / (self.scale * self.width))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:686: RuntimeWarning: divide by zero encountered in multiply
  length = a * (widthu_per_lenu / (self.scale * self.width))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:96: RuntimeWarning: divide by zero encountered in isnan
  return um.isnan(a)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:112: RuntimeWarning: divide by zero encountered in clip
  return ufunc(*args, out=out, **kwargs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:721: RuntimeWarning: divide by zero encountered in multiply
  x = x + np.array([0, 1, 1, 1]) * length
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:721: RuntimeWarning: divide by zero encountered in add
  x = x + np.array([0, 1, 1, 1]) * length
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:722: RuntimeWarning: divide by zero encountered in multiply
  y = 0.5 * np.array([1, 1, self.headwidth, 0], np.float64)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:727: RuntimeWarning: divide by zero encountered in multiply
  y0 = 0.5 * np.array([1, 1, self.headwidth, 0], np.float64)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:731: RuntimeWarning: divide by zero encountered in multiply
  Y[:, 3:-1] *= -1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:734: RuntimeWarning: divide by zero encountered in multiply
  Y0[3:-1] *= -1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:735: RuntimeWarning: divide by zero encountered in true_divide
  shrink = length / minsh if minsh != 0. else 0.
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:736: RuntimeWarning: divide by zero encountered in multiply
  X0 = shrink * X0[np.newaxis, :]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:737: RuntimeWarning: divide by zero encountered in multiply
  Y0 = shrink * Y0[np.newaxis, :]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:738: RuntimeWarning: divide by zero encountered in less
  short = np.repeat(length < minsh, 8, axis=1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:751: RuntimeWarning: divide by zero encountered in less
  tooshort = length < self.minlength
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\function_base.py:1482: RuntimeWarning: divide by zero encountered in arctan2
  a = arctan2(zimag, zreal)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:695: RuntimeWarning: divide by zero encountered in multiply
  xy = (X + Y * 1j) * np.exp(1j * theta) * self.width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:695: RuntimeWarning: divide by zero encountered in add
  xy = (X + Y * 1j) * np.exp(1j * theta) * self.width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:695: RuntimeWarning: divide by zero encountered in exp
  xy = (X + Y * 1j) * np.exp(1j * theta) * self.width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\collections.py:922: RuntimeWarning: divide by zero encountered in sqrt
  scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\collections.py:922: RuntimeWarning: divide by zero encountered in multiply
  scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\collections.py:922: RuntimeWarning: divide by zero encountered in true_divide
  scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2792: RuntimeWarning: divide by zero encountered in isfinite
  if (not np.isfinite(vmin)) or (not np.isfinite(vmax)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2805: RuntimeWarning: divide by zero encountered in double_scalars
  if maxabsvalue < (1e6 / tiny) * np.finfo(float).tiny:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2246: RuntimeWarning: divide by zero encountered in double_scalars
  length = ((ends[1][0] - ends[0][0]) / self.axes.figure.dpi) * 72
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2251: RuntimeWarning: divide by zero encountered in double_scalars
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2251: RuntimeWarning: divide by zero encountered in floor
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2050: RuntimeWarning: divide by zero encountered in true_divide
  scale = 10 ** (math.log10(dv / n) // 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2246: RuntimeWarning: divide by zero encountered in true_divide
  raw_step = (_vmax - _vmin) / nbins
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2247: RuntimeWarning: divide by zero encountered in multiply
  steps = self._extended_steps * scale
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2253: RuntimeWarning: divide by zero encountered in greater_equal
  istep = np.nonzero(steps >= raw_step)[0][0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2265: RuntimeWarning: divide by zero encountered in int_scalars
  for istep in reversed(range(istep + 1)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2271: RuntimeWarning: divide by zero encountered in double_scalars
  best_vmin = (_vmin // step) * step
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2278: RuntimeWarning: divide by zero encountered in double_scalars
  low = edge.le(_vmin - best_vmin)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2084: RuntimeWarning: divide by zero encountered in double_scalars
  d, m = divmod(x, self.step)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2085: RuntimeWarning: divide by zero encountered in double_scalars
  if self.closeto(m / self.step, 1):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2080: RuntimeWarning: divide by zero encountered in double_scalars
  return abs(ms - edge) < tol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2279: RuntimeWarning: divide by zero encountered in double_scalars
  high = edge.ge(_vmax - best_vmin)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2091: RuntimeWarning: divide by zero encountered in double_scalars
  d, m = divmod(x, self.step)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2092: RuntimeWarning: divide by zero encountered in double_scalars
  if self.closeto(m / self.step, 0):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2280: RuntimeWarning: divide by zero encountered in double_scalars
  ticks = np.arange(low, high + 1) * step + best_vmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2280: RuntimeWarning: divide by zero encountered in multiply
  ticks = np.arange(low, high + 1) * step + best_vmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2280: RuntimeWarning: divide by zero encountered in add
  ticks = np.arange(low, high + 1) * step + best_vmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2282: RuntimeWarning: divide by zero encountered in less_equal
  nticks = ((ticks <= _vmax) & (ticks >= _vmin)).sum()
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2282: RuntimeWarning: divide by zero encountered in greater_equal
  nticks = ((ticks <= _vmax) & (ticks >= _vmin)).sum()
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2282: RuntimeWarning: divide by zero encountered in bitwise_and
  nticks = ((ticks <= _vmax) & (ticks >= _vmin)).sum()
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:47: RuntimeWarning: divide by zero encountered in reduce
  return umr_sum(a, axis, dtype, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2285: RuntimeWarning: divide by zero encountered in add
  return ticks + offset
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:802: RuntimeWarning: divide by zero encountered in less_equal
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:802: RuntimeWarning: divide by zero encountered in bitwise_and
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:43: RuntimeWarning: divide by zero encountered in reduce
  return umr_minimum(a, axis, None, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:39: RuntimeWarning: divide by zero encountered in reduce
  return umr_maximum(a, axis, None, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:820: RuntimeWarning: divide by zero encountered in ceil
  oom_max = np.ceil(math.log10(abs_max))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:821: RuntimeWarning: divide by zero encountered in double_scalars
  oom = 1 + next(oom for oom in itertools.count(oom_max, -1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:822: RuntimeWarning: divide by zero encountered in double_scalars
  if abs_min // 10 ** oom != abs_max // 10 ** oom)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:823: RuntimeWarning: divide by zero encountered in double_scalars
  if (abs_max - abs_min) / 10 ** oom <= 1e-2:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:833: RuntimeWarning: divide by zero encountered in double_scalars
  if abs_max // 10 ** oom >= 10**n
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:850: RuntimeWarning: divide by zero encountered in less_equal
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:850: RuntimeWarning: divide by zero encountered in bitwise_and
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:851: RuntimeWarning: divide by zero encountered in absolute
  locs = np.abs(locs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:880: RuntimeWarning: divide by zero encountered in subtract
  locs = (np.asarray(_locs) - self.offset) / 10. ** self.orderOfMagnitude
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:880: RuntimeWarning: divide by zero encountered in true_divide
  locs = (np.asarray(_locs) - self.offset) / 10. ** self.orderOfMagnitude
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:275: RuntimeWarning: divide by zero encountered in reduce
  umr_maximum(a, axis, None, out, keepdims),
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:276: RuntimeWarning: divide by zero encountered in reduce
  umr_minimum(a, axis, None, None, keepdims),
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:277: RuntimeWarning: divide by zero encountered in subtract
  out
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:58: RuntimeWarning: divide by zero encountered in multiply
  return bound(*args, **kwds)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:58: RuntimeWarning: divide by zero encountered in rint
  return bound(*args, **kwds)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:58: RuntimeWarning: divide by zero encountered in true_divide
  return bound(*args, **kwds)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:897: RuntimeWarning: divide by zero encountered in subtract
  if np.abs(locs - np.round(locs, decimals=sigfigs)).max() < thresh:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:897: RuntimeWarning: divide by zero encountered in absolute
  if np.abs(locs - np.round(locs, decimals=sigfigs)).max() < thresh:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:659: RuntimeWarning: divide by zero encountered in double_scalars
  xp = (x - self.offset) / (10. ** self.orderOfMagnitude)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:1296: RuntimeWarning: divide by zero encountered in double_scalars
  tol = (hi - lo) * 1e-5
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2869: RuntimeWarning: divide by zero encountered in double_scalars
  rtol = (b - a) * rtol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2870: RuntimeWarning: divide by zero encountered in double_scalars
  return a - rtol <= val <= b + rtol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2870: RuntimeWarning: divide by zero encountered in less_equal
  return a - rtol <= val <= b + rtol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:635: RuntimeWarning: divide by zero encountered in add
  return Bbox(self._points + (tx, ty))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:689: RuntimeWarning: divide by zero encountered in isfinite
  if not np.isfinite(posx) or not np.isfinite(posy):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:709: RuntimeWarning: divide by zero encountered in double_scalars
  x = x + posx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:710: RuntimeWarning: divide by zero encountered in double_scalars
  y = y + posy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:712: RuntimeWarning: divide by zero encountered in double_scalars
  y = canvash - y
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:211: RuntimeWarning: divide by zero encountered in double_scalars
  x = round(x + xo + xd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:211: RuntimeWarning: divide by zero encountered in rint
  x = round(x + xo + xd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:212: RuntimeWarning: divide by zero encountered in double_scalars
  y = round(y + yo + yd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:212: RuntimeWarning: divide by zero encountered in rint
  y = round(y + yo + yd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2076: RuntimeWarning: divide by zero encountered in double_scalars
  (x, bottom - self.labelpad * self.figure.dpi / 72)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2108: RuntimeWarning: divide by zero encountered in double_scalars
  y = bottom - self.OFFSETTEXTPAD * self.figure.dpi / 72
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2531: RuntimeWarning: divide by zero encountered in double_scalars
  length = ((ends[1][1] - ends[0][1]) / self.axes.figure.dpi) * 72
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2535: RuntimeWarning: divide by zero encountered in double_scalars
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2535: RuntimeWarning: divide by zero encountered in floor
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2367: RuntimeWarning: divide by zero encountered in double_scalars
  (left - self.labelpad * self.figure.dpi / 72, y)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2393: RuntimeWarning: divide by zero encountered in double_scalars
  (x, top + self.OFFSETTEXTPAD * self.figure.dpi / 72)

According to the definition of velocity, we can find the particle paths by solving the problem

(3.17)\[\begin{equation}\frac{\mathrm{d}\underline{x}}{\mathrm{d}t}=\underline{v}(\underline{x},t).\end{equation}\]

For the example given in equation (3.10), the particle paths satisfy

(3.18)\[\begin{equation}\frac{\mathrm{d}x}{\mathrm{d}t}=1, \quad \frac{\mathrm{d}y}{\mathrm{d}t}=-2te^{-t^2}.\end{equation}\]

The solution that passes through a given point \((x_0,y_0)\) is given by

(3.19)\[\underline{x} (t-t_0+x_0,e^{-t^2}-e^{-t_0^2}+y_0).\]

In this example, the velocity approaches a constant value \((1,0)\) as \(t\) increases. Since the evolved velocity field is “steady” (time-independent) the particle paths and streamlines for this flow eventually coincide.

Exercise 3.6

Find the particle paths for the flow \(\underline{v}=(\alpha,\beta t,0)\), where \(\alpha, \beta\) are positive constants. Describe the shape of your solutions.

3.3.4. Streaklines

Fluid particles that pass through the same point at different times generally follow different paths. A streakline is the locus of all particles that have passed through a given point \(\underline{x}_0\). This is what we see when we inject smoke or dye into a moving fluid. We can find streaklines by solving the particle path problem for a range of release times \(t_0\). We may plot the result at a given time \(t\).

The animation below shows a sequence of particles injected at intervals into the fluid described by equation (3.10). Due to the changing vector field, the particles follow different trajectories depending on the time of release. The \((x,y)\) trajectory of a particle released at time \(t_0\) is given in equation (3.19). The set of particles together define a streakline.

import numpy as np
import matplotlib.pyplot as plt

from matplotlib import animation, rc
from IPython.display import HTML

n = 15
xgrid=np.linspace(1,3,n)
ygrid=np.linspace(0,2,n)
X, Y = np.meshgrid(xgrid, ygrid)

t=0
U=np.ones(X.shape)
V=-2*t*np.exp(-t**2)*np.ones(X.shape)
tmax,fnum=3,100

def x(t0,t):
  return t+(1-t0)

def y(t0,t):
  return 1+np.exp(-t**2)-np.exp(-t0**2)

#x = np.linspace(1, 3, 1000)

class testAnimation:

  def __init__(self):
    # First set up the figure, the axis, and the plot element we want to animate
    self.fig, ax = plt.subplots()
    plt.close()
    ax.set_xlim(( 1, 3))
    ax.set_ylim((0, 2))
    self.UVC = ax.quiver(X,Y,U,V)
    self.scat, = ax.plot([], [],'o', color='blue')

  # initialization function: plot the background of each frame
  def init(self):
      return (self.UVC, self.scat)

  # animation function. This is called sequentially  
  def animate(self, i):
      t=tmax/fnum*i;
      V=-2*t*np.exp(-t**2)*np.ones(X.shape)
      self.UVC.set_UVC(U,V)
      tgrid=np.arange(0,t,0.1)
      self.scat.set_data(x(tgrid,t), y(tgrid,t))
      return (self.UVC, self.scat)

  def draw(self):
    global anim
    anim = animation.FuncAnimation(self.fig, self.animate, init_func=self.init,
                             frames=fnum, interval=1000*tmax/fnum, blit=True)


vis = testAnimation()
vis.draw()

# Note: below is the part which makes it work on Colab
rc('animation', html='jshtml')

#anim.save('fluid.gif', writer = 'imagemagick', fps=10)

anim
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in exp
  
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in double_scalars
  
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in multiply
  
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\figure.py:321: RuntimeWarning: divide by zero encountered in isfinite
  if not np.isfinite(figsize).all() or (np.array(figsize) < 0).any():
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:62: RuntimeWarning: divide by zero encountered in reduce
  return umr_all(a, axis, dtype, out, keepdims)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\figure.py:321: RuntimeWarning: divide by zero encountered in less
  if not np.isfinite(figsize).all() or (np.array(figsize) < 0).any():
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\gridspec.py:203: RuntimeWarning: divide by zero encountered in subtract
  fig_tops, fig_bottoms = (top - cell_hs).reshape((-1, 2)).T
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\gridspec.py:204: RuntimeWarning: divide by zero encountered in add
  fig_lefts, fig_rights = (left + cell_ws).reshape((-1, 2)).T
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:367: RuntimeWarning: divide by zero encountered in double_scalars
  return points[1, 1] - points[0, 1]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\function_base.py:1281: RuntimeWarning: divide by zero encountered in subtract
  a = op(a[slice1], a[slice2])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2165: RuntimeWarning: divide by zero encountered in less_equal
  if np.any(np.diff(steps) <= 0) or steps[-1] > 10 or steps[0] < 1:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2179: RuntimeWarning: divide by zero encountered in multiply
  flights = (0.1 * steps[:-1], steps, 10 * steps[1])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2179: RuntimeWarning: divide by zero encountered in double_scalars
  flights = (0.1 * steps[:-1], steps, 10 * steps[1])
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:3210: RuntimeWarning: divide by zero encountered in isfinite
  and not np.isfinite(converted_limit)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\lines.py:70: RuntimeWarning: divide by zero encountered in long_scalars
  scaled_offset = offset * lw
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1712: RuntimeWarning: divide by zero encountered in equal
  return np.all(self.get_matrix() == other.get_matrix())
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axes\_base.py:2142: RuntimeWarning: divide by zero encountered in isfinite
  if not np.any(np.isfinite(xys)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:541: RuntimeWarning: divide by zero encountered in double_scalars
  self.width = 0.06 * self.span / sn
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:75: RuntimeWarning: divide by zero encountered in int_scalars
  items *= arr.shape[mu.normalize_axis_index(ax, arr.ndim)]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:178: RuntimeWarning: divide by zero encountered in reduce
  ret = umr_sum(arr, axis, dtype, out, keepdims, where=where)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:188: RuntimeWarning: divide by zero encountered in double_scalars
  ret = ret.dtype.type(ret / rcount)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:673: RuntimeWarning: divide by zero encountered in double_scalars
  scale = 1.8 * amean * sn / self.span
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2587: RuntimeWarning: divide by zero encountered in double_scalars
  x_scale = 1.0 / inw
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2588: RuntimeWarning: divide by zero encountered in double_scalars
  y_scale = 1.0 / inh
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2589: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx = np.array([[x_scale, 0.0    , (-inl*x_scale)],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2590: RuntimeWarning: divide by zero encountered in double_scalars
  [0.0    , y_scale, (-inb*y_scale)],
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:360: RuntimeWarning: divide by zero encountered in double_scalars
  width = xmax - xmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:361: RuntimeWarning: divide by zero encountered in double_scalars
  height = ymax - ymin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:373: RuntimeWarning: divide by zero encountered in double_scalars
  offsetx = (xmin + xmax) / 2
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:413: RuntimeWarning: divide by zero encountered in double_scalars
  xmin -= offsetx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:414: RuntimeWarning: divide by zero encountered in double_scalars
  ymin -= offsety
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:419: RuntimeWarning: divide by zero encountered in subtract
  xys = M.transform(offset_layout) - (offsetx, offsety)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:386: RuntimeWarning: divide by zero encountered in double_scalars
  offsety = ymin + height - baseline / 2.0
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\animation.py:91: RuntimeWarning: divide by zero encountered in double_scalars
  wnew = int(w * dpi / n) * n / dpi
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\animation.py:92: RuntimeWarning: divide by zero encountered in double_scalars
  hnew = int(h * dpi / n) * n / dpi
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\animation.py:226: RuntimeWarning: divide by zero encountered in double_scalars
  return int(w * self.dpi), int(h * self.dpi)
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:43: RuntimeWarning: divide by zero encountered in exp
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:43: RuntimeWarning: divide by zero encountered in double_scalars
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:43: RuntimeWarning: divide by zero encountered in multiply
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:2365: RuntimeWarning: divide by zero encountered in isfinite
  condition = ~(np.isfinite(a))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:2365: RuntimeWarning: divide by zero encountered in invert
  condition = ~(np.isfinite(a))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\ma\core.py:1753: RuntimeWarning: divide by zero encountered in logical_or
  return make_mask(umath.logical_or(m1, m2), copy=copy, shrink=shrink)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:56: RuntimeWarning: divide by zero encountered in reduce
  return umr_any(a, axis, dtype, out, keepdims)
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:18: RuntimeWarning: divide by zero encountered in subtract
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:18: RuntimeWarning: divide by zero encountered in add
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:21: RuntimeWarning: divide by zero encountered in exp
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:21: RuntimeWarning: divide by zero encountered in double_scalars
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:21: RuntimeWarning: divide by zero encountered in square
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:21: RuntimeWarning: divide by zero encountered in negative
C:\Users\Ali\anaconda3\lib\site-packages\ipykernel_launcher.py:21: RuntimeWarning: divide by zero encountered in subtract
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:373: RuntimeWarning: divide by zero encountered in subtract
  return points[1] - points[0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:993: RuntimeWarning: divide by zero encountered in not_equal
  if np.any(self._points != other.get_points()):
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:87: RuntimeWarning: divide by zero encountered in reduce
  return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1977: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 2] += tx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1978: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 2] += ty
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:379: RuntimeWarning: divide by zero encountered in double_scalars
  return (x0, y0, x1 - x0, y1 - y0)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:813: RuntimeWarning: divide by zero encountered in double_scalars
  return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:361: RuntimeWarning: divide by zero encountered in double_scalars
  return points[1, 0] - points[0, 0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1996: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 0] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1997: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 1] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1998: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[0, 2] *= sx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:1999: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 0] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2000: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 1] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2001: RuntimeWarning: divide by zero encountered in double_scalars
  self._mtx[1, 2] *= sy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:648: RuntimeWarning: divide by zero encountered in multiply
  uv = (U + V * 1j)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:648: RuntimeWarning: divide by zero encountered in add
  uv = (U + V * 1j)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:664: RuntimeWarning: divide by zero encountered in absolute
  a = np.abs(uv)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:686: RuntimeWarning: divide by zero encountered in double_scalars
  length = a * (widthu_per_lenu / (self.scale * self.width))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:686: RuntimeWarning: divide by zero encountered in multiply
  length = a * (widthu_per_lenu / (self.scale * self.width))
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:96: RuntimeWarning: divide by zero encountered in isnan
  return um.isnan(a)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:112: RuntimeWarning: divide by zero encountered in clip
  return ufunc(*args, out=out, **kwargs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:721: RuntimeWarning: divide by zero encountered in multiply
  x = x + np.array([0, 1, 1, 1]) * length
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:721: RuntimeWarning: divide by zero encountered in add
  x = x + np.array([0, 1, 1, 1]) * length
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:722: RuntimeWarning: divide by zero encountered in multiply
  y = 0.5 * np.array([1, 1, self.headwidth, 0], np.float64)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:727: RuntimeWarning: divide by zero encountered in multiply
  y0 = 0.5 * np.array([1, 1, self.headwidth, 0], np.float64)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:731: RuntimeWarning: divide by zero encountered in multiply
  Y[:, 3:-1] *= -1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:734: RuntimeWarning: divide by zero encountered in multiply
  Y0[3:-1] *= -1
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:735: RuntimeWarning: divide by zero encountered in true_divide
  shrink = length / minsh if minsh != 0. else 0.
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:736: RuntimeWarning: divide by zero encountered in multiply
  X0 = shrink * X0[np.newaxis, :]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:737: RuntimeWarning: divide by zero encountered in multiply
  Y0 = shrink * Y0[np.newaxis, :]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:738: RuntimeWarning: divide by zero encountered in less
  short = np.repeat(length < minsh, 8, axis=1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:751: RuntimeWarning: divide by zero encountered in less
  tooshort = length < self.minlength
C:\Users\Ali\anaconda3\lib\site-packages\numpy\lib\function_base.py:1482: RuntimeWarning: divide by zero encountered in arctan2
  a = arctan2(zimag, zreal)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:695: RuntimeWarning: divide by zero encountered in multiply
  xy = (X + Y * 1j) * np.exp(1j * theta) * self.width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:695: RuntimeWarning: divide by zero encountered in add
  xy = (X + Y * 1j) * np.exp(1j * theta) * self.width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\quiver.py:695: RuntimeWarning: divide by zero encountered in exp
  xy = (X + Y * 1j) * np.exp(1j * theta) * self.width
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\collections.py:922: RuntimeWarning: divide by zero encountered in sqrt
  scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\collections.py:922: RuntimeWarning: divide by zero encountered in multiply
  scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\collections.py:922: RuntimeWarning: divide by zero encountered in true_divide
  scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2792: RuntimeWarning: divide by zero encountered in isfinite
  if (not np.isfinite(vmin)) or (not np.isfinite(vmax)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2805: RuntimeWarning: divide by zero encountered in double_scalars
  if maxabsvalue < (1e6 / tiny) * np.finfo(float).tiny:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2246: RuntimeWarning: divide by zero encountered in double_scalars
  length = ((ends[1][0] - ends[0][0]) / self.axes.figure.dpi) * 72
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2251: RuntimeWarning: divide by zero encountered in double_scalars
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2251: RuntimeWarning: divide by zero encountered in floor
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2050: RuntimeWarning: divide by zero encountered in true_divide
  scale = 10 ** (math.log10(dv / n) // 1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2246: RuntimeWarning: divide by zero encountered in true_divide
  raw_step = (_vmax - _vmin) / nbins
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2247: RuntimeWarning: divide by zero encountered in multiply
  steps = self._extended_steps * scale
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2253: RuntimeWarning: divide by zero encountered in greater_equal
  istep = np.nonzero(steps >= raw_step)[0][0]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2265: RuntimeWarning: divide by zero encountered in int_scalars
  for istep in reversed(range(istep + 1)):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2271: RuntimeWarning: divide by zero encountered in double_scalars
  best_vmin = (_vmin // step) * step
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2278: RuntimeWarning: divide by zero encountered in double_scalars
  low = edge.le(_vmin - best_vmin)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2084: RuntimeWarning: divide by zero encountered in double_scalars
  d, m = divmod(x, self.step)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2085: RuntimeWarning: divide by zero encountered in double_scalars
  if self.closeto(m / self.step, 1):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2080: RuntimeWarning: divide by zero encountered in double_scalars
  return abs(ms - edge) < tol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2279: RuntimeWarning: divide by zero encountered in double_scalars
  high = edge.ge(_vmax - best_vmin)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2091: RuntimeWarning: divide by zero encountered in double_scalars
  d, m = divmod(x, self.step)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2092: RuntimeWarning: divide by zero encountered in double_scalars
  if self.closeto(m / self.step, 0):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2280: RuntimeWarning: divide by zero encountered in double_scalars
  ticks = np.arange(low, high + 1) * step + best_vmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2280: RuntimeWarning: divide by zero encountered in multiply
  ticks = np.arange(low, high + 1) * step + best_vmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2280: RuntimeWarning: divide by zero encountered in add
  ticks = np.arange(low, high + 1) * step + best_vmin
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2282: RuntimeWarning: divide by zero encountered in less_equal
  nticks = ((ticks <= _vmax) & (ticks >= _vmin)).sum()
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2282: RuntimeWarning: divide by zero encountered in greater_equal
  nticks = ((ticks <= _vmax) & (ticks >= _vmin)).sum()
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2282: RuntimeWarning: divide by zero encountered in bitwise_and
  nticks = ((ticks <= _vmax) & (ticks >= _vmin)).sum()
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:47: RuntimeWarning: divide by zero encountered in reduce
  return umr_sum(a, axis, dtype, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:2285: RuntimeWarning: divide by zero encountered in add
  return ticks + offset
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:802: RuntimeWarning: divide by zero encountered in less_equal
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:802: RuntimeWarning: divide by zero encountered in bitwise_and
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:43: RuntimeWarning: divide by zero encountered in reduce
  return umr_minimum(a, axis, None, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:39: RuntimeWarning: divide by zero encountered in reduce
  return umr_maximum(a, axis, None, out, keepdims, initial, where)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:820: RuntimeWarning: divide by zero encountered in ceil
  oom_max = np.ceil(math.log10(abs_max))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:821: RuntimeWarning: divide by zero encountered in double_scalars
  oom = 1 + next(oom for oom in itertools.count(oom_max, -1)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:822: RuntimeWarning: divide by zero encountered in double_scalars
  if abs_min // 10 ** oom != abs_max // 10 ** oom)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:823: RuntimeWarning: divide by zero encountered in double_scalars
  if (abs_max - abs_min) / 10 ** oom <= 1e-2:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:833: RuntimeWarning: divide by zero encountered in double_scalars
  if abs_max // 10 ** oom >= 10**n
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:850: RuntimeWarning: divide by zero encountered in less_equal
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:850: RuntimeWarning: divide by zero encountered in bitwise_and
  locs = locs[(vmin <= locs) & (locs <= vmax)]
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:851: RuntimeWarning: divide by zero encountered in absolute
  locs = np.abs(locs)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:880: RuntimeWarning: divide by zero encountered in subtract
  locs = (np.asarray(_locs) - self.offset) / 10. ** self.orderOfMagnitude
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:880: RuntimeWarning: divide by zero encountered in true_divide
  locs = (np.asarray(_locs) - self.offset) / 10. ** self.orderOfMagnitude
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:275: RuntimeWarning: divide by zero encountered in reduce
  umr_maximum(a, axis, None, out, keepdims),
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:276: RuntimeWarning: divide by zero encountered in reduce
  umr_minimum(a, axis, None, None, keepdims),
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\_methods.py:277: RuntimeWarning: divide by zero encountered in subtract
  out
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:58: RuntimeWarning: divide by zero encountered in multiply
  return bound(*args, **kwds)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:58: RuntimeWarning: divide by zero encountered in rint
  return bound(*args, **kwds)
C:\Users\Ali\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:58: RuntimeWarning: divide by zero encountered in true_divide
  return bound(*args, **kwds)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:897: RuntimeWarning: divide by zero encountered in subtract
  if np.abs(locs - np.round(locs, decimals=sigfigs)).max() < thresh:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:897: RuntimeWarning: divide by zero encountered in absolute
  if np.abs(locs - np.round(locs, decimals=sigfigs)).max() < thresh:
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\ticker.py:659: RuntimeWarning: divide by zero encountered in double_scalars
  xp = (x - self.offset) / (10. ** self.orderOfMagnitude)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:1296: RuntimeWarning: divide by zero encountered in double_scalars
  tol = (hi - lo) * 1e-5
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2869: RuntimeWarning: divide by zero encountered in double_scalars
  rtol = (b - a) * rtol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2870: RuntimeWarning: divide by zero encountered in double_scalars
  return a - rtol <= val <= b + rtol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:2870: RuntimeWarning: divide by zero encountered in less_equal
  return a - rtol <= val <= b + rtol
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\transforms.py:635: RuntimeWarning: divide by zero encountered in add
  return Bbox(self._points + (tx, ty))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:689: RuntimeWarning: divide by zero encountered in isfinite
  if not np.isfinite(posx) or not np.isfinite(posy):
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:709: RuntimeWarning: divide by zero encountered in double_scalars
  x = x + posx
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:710: RuntimeWarning: divide by zero encountered in double_scalars
  y = y + posy
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\text.py:712: RuntimeWarning: divide by zero encountered in double_scalars
  y = canvash - y
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:211: RuntimeWarning: divide by zero encountered in double_scalars
  x = round(x + xo + xd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:211: RuntimeWarning: divide by zero encountered in rint
  x = round(x + xo + xd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:212: RuntimeWarning: divide by zero encountered in double_scalars
  y = round(y + yo + yd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:212: RuntimeWarning: divide by zero encountered in rint
  y = round(y + yo + yd)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2076: RuntimeWarning: divide by zero encountered in double_scalars
  (x, bottom - self.labelpad * self.figure.dpi / 72)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2108: RuntimeWarning: divide by zero encountered in double_scalars
  y = bottom - self.OFFSETTEXTPAD * self.figure.dpi / 72
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2531: RuntimeWarning: divide by zero encountered in double_scalars
  length = ((ends[1][1] - ends[0][1]) / self.axes.figure.dpi) * 72
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2535: RuntimeWarning: divide by zero encountered in double_scalars
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2535: RuntimeWarning: divide by zero encountered in floor
  return int(np.floor(length / size))
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2367: RuntimeWarning: divide by zero encountered in double_scalars
  (left - self.labelpad * self.figure.dpi / 72, y)
C:\Users\Ali\anaconda3\lib\site-packages\matplotlib\axis.py:2393: RuntimeWarning: divide by zero encountered in double_scalars
  (x, top + self.OFFSETTEXTPAD * self.figure.dpi / 72)

The image below is a classic photograph taken from An Album of Fluid Motion (1982) by Van Dyke. The image shows streaklines over an airfoil in an oncoming fluid flow. The streaklines are illustrated by smoke particles that have been injected into the flow upstream. The flow is mostly very smooth, due to great care taken by the experimenters to reduce air disturbances, but notice some disturbance occuring in the fluid near to the trailing edge of the airfoil. We will investigate this phenomenon soon.


alternative description

If you are interested to see images and videos of fluid flow that have been recorded more recently, you could take a look at the Gallery of Fluid Motion, presented by the Americal Physics Society Division of Fluid Dynamics. Many of the modern entries are computer simulations of fluid, rather than experimental footage.